package ar.com.uade.administradorsiembra.common;

import ar.com.uade.administradorsiembra.persistencia.PoolConnection;
import java.sql.Connection;
import java.sql.SQLException;

public class ContextoTransaccional {
	private final PoolConnection pool;
	private Connection conexionActual;
	private Transaccion transaccionActual;
	
	public ContextoTransaccional(boolean usarConexionSimple) throws SQLException {
		this.pool = PoolConnection.getPoolConnection();
		
		if(usarConexionSimple) {
			try {
				this.conexionActual = this.pool.getConnection();
				this.conexionActual.setAutoCommit(true);
			} catch (SQLException e) {
				this.liberarConexion();
				throw e;
			}
		} else {
			this.transaccionActual = new Transaccion();
			this.transaccionActual.iniciar();
		}
	}
	
	public Connection getConexionActual() {
		return this.conexionActual;
	}
	
	public Transaccion getTransaccionActual() {
		return this.transaccionActual;
	}
	
	public void liberarConexion() {
		if(this.conexionActual == null) {
			if(this.transaccionActual != null) {
				this.transaccionActual.liberarConexionActiva();
			}
		} else {
			this.pool.realeaseConnection(this.conexionActual);
			this.conexionActual = null;
		}
	}
}
